﻿using System.Collections.Generic;
using System.Web.Mvc;
using Bll.Sys;
using Common;
using Model.Database;
using Model.Sys;
using Model.Sys.Config;
using Model.Sys.Constant;

namespace Controllers.Extend
{
    /// <summary>
    /// 用户基础控制器（“用户信息”的验证）
    /// </summary>
    public class UserBaseController : BaseController
    {
        protected UserInfo loginUser = null;
        protected string cookieName = "";
        protected string cookieValue = "";

        /// <summary>
        /// 获取已验证用户信息
        /// </summary>
        protected override void OnAuthorization(AuthorizationContext filterContext)
        {
            var cookieValueTemp = CookieHelper.GetCookieValue(cookieName);
            if (!string.IsNullOrEmpty(cookieValueTemp))
            {
                cookieValue = cookieValueTemp;
                Cache<UserInfo> userInfoCache= CurrentBllSession.CacheBll.GetCache<UserInfo>(cookieValue);//理论上，这里应该记录是否登录的标记，不用读取用户信息。但是，这里由于要兼容Redis和MemoryCache的实现，直接读取了用户信息。所以，切换为Redis时，会影响性能。优点：其他方法里可以直接使用loginUser,不用再去读。
                if (userInfoCache!=null)
                {
                    this.loginUser = userInfoCache.Value;
                }
            }
        }

        /// <summary>
        /// 执行前读取站点配置信息
        /// </summary>
        protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            base.OnActionExecuting(filterContext);
        }

        /// <summary>
        /// 返回结果前附加数据
        /// </summary>
        protected override void OnActionExecuted(ActionExecutedContext filterContext)
        {
            base.OnActionExecuted(filterContext);
            if (this.loginUser != null)//给视图设置用户信息
            {
                ViewData["LoginUser"] = this.loginUser;
            }
        }
    }
}
